「提示工程系列」转译(4):提示合奏使LLM更可靠-简单策略挖掘更多LLM潜能
题图|论文截图[1/2]
正文|Cameron R. Wolfe@Deep(Learning)Focus
▽
论述题记
▩教LLM如何编程
任何人,凡和大型语言模型 (LLM) 的打过交道的,都会知道提示工程是一个非程式化的、且困难的过程。对提示的微小更改可能会导致模型输出发生巨大变化,很难(在某些情况下甚至不可能)预测更改提示会产生的影响,并且提示行为在很大程度上取决于所使用的模型类型。当我们考虑使用 LLM 创建应用程序时,提示工程的脆弱性是一个严酷的现实。
“Prompting is a brittle process wherein small modifications to the prompt can cause large variations in the model predictions, and therefore significant effort is dedicated towards designing a painstakingly perfect prompt for a task.” - from [2] “提示是一个脆弱的过程,其中对提示的小修改可能会导致模型预测发生很大变化,因此需要付出大量努力来为任务精心设计一个完美提示。” - 来自论文[2]
论述背景
在了解有关提示合奏和 LLM 可靠性的最新研究之前,让我们先看一下与 LLM 相关的一些核心概念和背景信息,这将有助于使本概述更加完整和易于理解。
▩一些先决条件
△
这篇文章的大部分内容将重点关注提示工程和提示合奏。因此,我们不会涵盖太多关于现代 LLM 及其创建方式的背景材料。幸运的是,我已经写了很多关于这个主题的概述,可以用来快速获得对这些系统如何工作的基本了解。首先,我推荐以下资源:
LLM的历史
LLM的组成部分
语言模型预训练
单解码器变压器
*「提示工程系列」转译(3):提示工程进阶-当小样本学习还不足以解决问题怎么办?
▩什么是可靠性?
当我们研究可靠性时,提供概念的精确定义是有用的。如前所述,LLM 可能非常脆弱。如果我们稍微改变输入,我们可能会得到截然不同的输出。通常,LLM 的输出是不可预测且不准确的。Chip Huyen 在最近的一篇博文中广泛讨论了这些问题。下面的引述概述了与传统编程任务相比,使用 LLM 构建应用程序的难度。
“Programming languages are mostly exact… In prompt engineering, instructions are written in natural languages, which are a lot more flexible than programming languages… The ambiguity in LLMs’ generated responses can be a dealbreaker.” - from Chip Huyen “编程语言大多是精确的……在提示工程中,指令是用自然语言编写的,这比编程语言灵活得多……LLM 生成的响应中的歧义可能会破坏交易。” - 来自Chip Huyen博客
可靠性是解决方案|从高层次上看,可靠性是指系统减轻噪声和抽象或避免与 LLM 不一致行为的能力。这可能意味着从使 LLM 更准确到提高模型行为的一致性或可预测性。如果我们想最大化 LLM 的效用,我们必须找到使它们的行为更可靠的方法,以便可以围绕它们构建应用程序,而不会出现任何破坏系统的非预期“惊喜”。实际上,这意味着我们必须:
采用更严格/系统的方法来进行提示工程
找到使 LLM 更具可预测性和准确性的技术
当 LLM 不符合我们所需的格式时,制定保障措施/边界。
上述每一点都是提高 LLM 可靠性的一个步骤。简而言之,我们只是想找到使我们的 LLM 在应用程序中表现得更一致的方法,以便最终用户减少困惑并获得更理想的体验。如果我们致力于采用更严格的方法来处理 LLM,则完全有可能最大限度地减少即时工程的脆弱性并减少 LLM 的整体模糊性。
在本文论述中,我们将主要关注上面概述的第二点——使 LLM 更具可预测性和准确性的技术。
▩解决LLM交互中的棘手问题
△
尽管 LLM 可以使用少样本学习等技术解决许多任务,但他们往往难以解决多步问题或需要推理的问题 [15]。作为一种解决方案,最近的研究探索了思维链 (CoT) 提示 [3] 等技术,包括自洽性 [4] 等几个显著的扩展,以提高 LLM 的推理能力。从这项工作中,我们了解到语言模型已经具备解决困难(基于推理)问题的能力——我们只需要使用正确的提示方法!
“Large pretrained language models have built in reasoning capabilities, but they need specific prompts to unleash their power.” - from [1] “大型预训练语言模型内置了推理能力,但它们需要特定的提示才能发挥其威力。” - 来自论文[1]
自洽|给定 CoT 提示方法,自我一致性 [4] 可以提高 LLM 的准确性,只需
i)从同一模型生成多个不同的输出,以及
ii)使用每个输出答案的多数票作为我们的最终答案;见下文。
该技术通过聚合不同输出集的结果来提高 LLM 的准确性。自洽性既简单又有效,表明提高 LLM 可靠性的实用技术可能并不遥远。因此,我们可能想知道:
我们如何才能进一步采用这种方法?是否还有其他更有效的简单技术?
提示合奏|自洽的有效性源于在形成最终答案时考虑的生成输出的多样性。但是,我们应该注意这项技术的一个关键细节——所有输出都使用相同的提示生成。为了增加生成输出的多样性,我们可以考虑一组不同的多个提示来解决同一问题。
“People think differently, [but] different thoughts often lead to the same, correct answer.” - from [1] “人们的想法不同,[但]不同的想法往往会导致相同的正确答案。” - 来自论文[1]
与自洽相比,这种称为提示合奏的方法可用于生成更加多样化的模型输出集,从而进一步提高 LLM 应用程序的可靠性。此外,提示合奏易于理解,无需花大量实现精力即可自动构建。在这篇文章中,我们将探索最近关于 prompt ensembles 的研究,重点关注使 LLM 更有效的实用工具。
▩其它重要概念
除了目前涵盖的概念之外,概述中后面提到的一些小概念和术语可能有助于理解。
自举|这是更广泛的计算机科学界常用的通用术语。它指的是利用现有资源来做一些新的或有用的事情。在本概述的情况下,我们使用引导来描述使用现有的、预训练的 LLM 作为系统中的一个组件,该系统会生成新的提示以供在合奏中使用。
弱监督|有许多不同的方法来训练机器学习模型。弱监督是一种介于有监督和无监督学习之间的技术。它不像监督学习那样完全依赖于标记数据,但它确实使用某种形式的“标签”作为训练信号。例如,我们可能会使用一些启发式方法生成“伪标签”,或者甚至在训练期间使用标记和未标记数据的组合。有关更多详细信息,请查看下面链接的 Snorkel AI 的精彩概述。
Weak Supervision[https://snorkel.ai/weak-supervision/]
Jaccard指数| Jaccard 指数,在 ML 社区中通常称为并集交集 (IoU-Intersection over Union),用于计算两个有限集之间的相似性。为了计算 Jaccard 指数的值,我们找到两个集合之间相交元素的数量,然后将该数字除以两个集合之间的并集的大小。例如,如果我们有两个由 {a, b, c} 和 {b, c, d} 给出的集合,则 Jaccard 指数将为 0.5(即,两个元素相交并且两个集合之间有四个唯一元素)。
提示合奏的研究
之前关于 CoT 提示和自洽性的工作已经向我们表明,聪明的提示策略可以极大地提高 LLM 可靠地解决难题的能力。我们现在将越过这些简单的基线,看看最近研究prompt ensembles与LLM的使用方面的探索。这些工作提供了有关最佳实践的丰富实践知识,我们可以采用这些知识来提高 LLM 的可靠性。
▩推理步骤的多样化验证者[1]
“People think differently, [but] different thoughts often lead to the same, correct answer.” - from [1] “人们的想法不同,[但]不同的想法往往会导致相同的正确答案。” - 来自论文[1]
论文[1] 中的作者探索了 CoT 的扩展和自洽提示技术 [3, 4],可提高复杂的多步骤推理任务的性能。这种称为 DiVeRSE 的技术使用提示集合(即旨在解决同一问题的不同提示的集合)来增强生成的推理路径的多样性,然后训练验证模块来推断每个输出的正确性;见下图。
训练验证器/分类器来预测每个推理路径的正确性。
根据正确性对推理路径进行加权平均。
简而言之,DiVeRSE 通过
i) 增强生成的推理路径的多样性和
ii) 为构建最终答案时可能正确的推理路径分配更多权重
来提高 LLM 推理能力。
△
构建提示合奏| DiVeRSE 的主要优势之一是它使用提示合奏来最大化生成输出的多样性。但是,生成这些提示集合是否很昂贵?我们可以自动构建提示集合吗?特别考虑到 CoT 提示,我们可以通过两种主要方式生成提示合奏(见上图):
重采样Resampling:给定包含问题、答案和 K 基本原理的 CoT 提示,我们可以通过从全套逻辑依据中随机采样 R < K 示例来生成独特的提示。
自举Bootstrapping:如果我们的 CoT 提示不包含足够的少样本示例来执行重采样,我们可以简单地提示一个单独的 LLM 来生成伪推理路径,以便在执行重采样时包含在内。
“Causal language models have no mechanism to correct previous errors in earlier steps, which quickly leads to disoriented results.” - from [1] “因果语言模型没有机制来纠正早期步骤中的先前错误,这很快会导致迷失方向的结果。” - 来自论文[1]
在测试时,此验证器用于为 DiVeRSE 生成的每条推理路径生成正确性分数,正确性分数较低的路径对最终答案的投票较少。有趣的是,我们在 [1] 中看到执行逐步验证(即训练验证器预测每个单独推理步骤的正确性而不是整个路径)尤其可以导致推理性能的大幅提高;见下图。
它的表现如何?|将 DiVeRSE 与贪婪解码和自一致性等基线技术进行了比较,使用了几种不同的 LLM,例如来自 OpenAI API 的 davinci (GPT-3)、text-davinci-002 (GPT-3.5) 和 code-davinci-002。在执行算术、常识和归纳推理的八种不同推理任务中,DiVeRSE 实现了对自我一致性的一致改进;见下图。最值得注意的是,代码为 davinci-002 的 DiVeRSE 在六个基准测试中实现了最先进的性能,甚至超过了强大的 5400 亿参数 PaLM 模型 [7]。
iii) 使用验证器(和步骤尤其是 -wise 验证者)比多数投票表现得更好(尽管多数投票要简单得多!);
详见下图。
▩AMA(Ask Me Anything)[2]
△
虽然这听起来不错,但我们可能有几个问题。这适用于所有任务吗?收集提示很贵吗?我们应该如何汇总结果?[2] 中提出的方法旨在兼具可扩展性和通用性,这意味着它可用于提高任何模型或任务的性能。这种效率和效果来自三个主要思想:
提示结构:AMA 强调使用开放式提示,而不是那些在输出中限制tokens的提示。
可扩展的提示生成:AMA 使用 LLM 来生成和回答提示,而不是让人类手动编写开放式提示的集合,从而减少了人工所需的工作量。
弱监督:由于多数投票表现不佳,AMA 使用弱监督来学习提示之间的依赖关系,并将 LLM 输出聚合为准确的最终答案。
为什么多数表决效果不佳?|除了提高整体中存在的提示的质量和结构之外,[2] 中的工作的动机是通过对提示整体进行 LLM 输出的多数投票来生成最终答案(例如,在自我一致性中[4]) 效果不佳。但是,为什么会这样呢?有趣的是,[2] 中的作者提供了一个非常清晰和直观的答案。
“We see 9.5% average variation in accuracy and that the Jaccard index over errors is 69% higher than if prompt errors were i.i.d. Majority vote (MV) is the primary unsupervised aggregation strategy in prior work but it does not account for either property, making it unreliable.” - from [2] “我们看到准确度的平均变化为 9.5%,并且 Jaccard 错误指数比提示错误为 i.i.d 时高 69%。多数投票 (MV) 是先前工作中主要的无监督聚合策略,但它不考虑任何一个属性,因此不可靠。” - 来自论文[2]
换句话说,LLM 犯的错误不是随机分布的!相反,多个不同提示的 LLM 输出可能会集中在一个错误的答案周围。这对于多数投票来说是一个巨大的问题,因为错误的答案实际上可能是我们的多数投票!为了解决这个问题,我们需要一种更复杂的策略,可以通过对集成中提示输出之间的准确性和依赖性进行建模来检测和处理此类情况。
比较这些提示策略时,我们发现开放式提示格式(即完形填空和自由格式)优于要求 LLM 输出一组特定标记的限制性提示格式。更进一步,使自由格式提示中的问题更精确或更具体也可以显着提高准确性。为什么自由形式提示效果更好?答案并不完全清楚,但自由形式生成更接近于用于预训练大多数 LLM 的下一个标记预测任务,这直观地意味着此类模型可能更擅长解决这种格式的任务。
受开放式提示有效性的启发,AMA 通过生成关于给定输入的问题集来形成提示合奏;见上图。这些问题采用自由格式,强调输入的不同方面,这些方面可能提供有用和补充的信息。但是,手动生成这些问题的成本可能很高!为了避免这种情况,我们可以使用 LLM!在 [2] 中,我们看到 LLM 可以通过使用少样本学习来生成关于所需主题的有用问题;见下图。
“To aggregate prompt predictions reliably, we apply tools from weak supervision, a powerful approach for learning high-quality models from weaker sources of signal without labeled data.” - from [2] “为了可靠地汇总提示预测,我们应用了来自弱监督的工具,这是一种从没有标记数据的较弱信号源学习高质量模型的强大方法。” - 来自论文[2]
汇总结果|我们可以构建一个提示合奏了,但还有一个问题:我们如何从每个提示中聚合 LLM 的输出?特别是对于自由形式的提示,从 LLM 输出中提取正确答案可能非常困难。[2] 中的聚合方法借鉴了之前在弱监督和图模型 [8、9、10] 中的工作。更高层次的想法是使用弱监督来学习和预测不同提示之间的依赖关系以及每个提示的准确性。我们可以使用此信息来汇总提示并推断出最有可能的最终答案。与 DiVeRSE 不同,这种方法不需要标记数据,并解决了多数投票的常见失败案例(例如,LLM 在不同的提示上产生相同的错误)。
AMA 表现好吗?|AMA 方法使用各种 LLM(即四个不同的模型系列,包括 BLOOM、OPT、EleutherAI 和 T0)在 20 个不同的基准上进行了测试,参数大小从 1.25 亿到 1750 亿不等。[2] 中的分析目标是确定 AMA 是否是一种可以在许多不同设置中工作的通用方法。这个分析的结果是非常积极的。使用 AMA,我们看到小型开源模型(特别是 GPT-J-6B)可以胜过 GPT-3 等大型模型;见下图。
当测试所有不同的模型时,我们发现中等规模的模型(即 6-200 亿个参数)从 AMA 中获益最大;见下图。相对于基线、少样本提示技术,AMA 在所有模型和任务的性能上提供了约 10% 的绝对改进。因此,它是一种通用方法,可以可靠地提高几乎所有 LLM 的性能。
AMA 为构建提示合奏提供了一种有见地的方法。发表的论文中充满了引导预训练 LLM 编写有效提示的实用技巧。我们在 [2] 中看到,用于在提示合奏上聚合 LLM 响应的方法非常重要——多数投票是不够的![2] 中提出的聚合方法在技术上很复杂,可能需要实施工作,但它表现良好并且不需要监督标签。通过采用 AMA 等方法,我们可以通过使任何 LLM 更加准确和一致来提高 LLM 的可靠性。
“We hope AMA and future work help address pain points of using LLMs by improving the ability to proceed with less-than-perfect prompts and enabling the use of small, private, and open-source LLMs.” - from [2] “我们希望 AMA 和未来的工作通过提高处理不完美提示的能力并启用小型、私有和开源 LLM 的使用,帮助解决使用 LLM 的痛点。” - 来自论文[2]
结束语
ii) 使用这些提示中的每一个生成多个 LLM 输出,以及
iii) 聚合这些输出以形成最终答案。
可靠性很重要|要在现实世界中使用 LLM,我们需要围绕它们构建软件系统。但是,要围绕 LLM 构建软件系统,我们需要减轻这些模型的不可预测/模糊性。Prompt ensembles 提供了一种非常简单的方法来使 LLM 更加准确和可靠。通过鼓励 LLM 为解决特定问题生成一组不同的输出,我们可以研究这些响应之间的关系并开发自动技术以生成更高质量的最终结果。
跨 LLM 的泛化|通常,提示工程策略是脆弱的。如果我们调整我们的提示,我们可能会得到截然不同的结果。如果我们保持提示不变并更改我们的模型,同样适用。如果我们构建一个 LLM 支持的应用程序,然后决定切换正在使用的底层模型,我们可能还必须更改大部分正在使用的提示。然而,通过 AMA [2] 等技术,我们发现提示合奏可以缓解这个问题,因为它们在各种不同模型中提供了一致的性能改进。因此,提示合奏通过对所使用的基础模型缺乏敏感性来提高可靠性。
聚合的确困难|在阅读了自洽性之后,我很乐观地认为可以通过简单的提示技术使 LLM 变得更加可靠。正如我们在本概述中看到的,这并不总是正确的。我们可以轻松地为 LLM 的任何给定问题生成多个不同的输出,但我们聚合这些响应的方式是关键。不幸的是,DiVeRSE 和 AMA 提出的方法非常复杂,可能需要大量的实施工作。但是,我们清楚地看到,仅仅获得多数票还不足以实现更复杂技术的性能。希望很快会提出更简单的聚合技术。
限制|尽管提示合奏很棒,但它们并不完美。DiVeRSE 和 AMA 等技术依赖于为每个已回答的问题生成带有 LLM 的大量输出。我们使用多个提示,甚至可能为每个提示生成多个响应——这是 LLM 的大量推理!正因为如此,无论从金钱上还是从延迟的角度来看,提示合奏都可能很昂贵。如果我们想在现实世界的应用程序中利用 prompt ensembles,我们必须非常小心它的应用方式,因为它可能会极大地改变应用程序的成本和效率。
附录:Bibliography
[1] Li, Yifei, et al. "On the advance of making language models better reasoners." arXiv preprint arXiv:2206.02336 (2022).
[17] Zhou, Denny, et al. "Least-to-most prompting enables complex reasoning in large language models." arXiv preprint arXiv:2205.10625 (2022).
参考
-CAMERON R. WOLFE:Prompt Ensembles Make LLMs More Reliable
https://cameronrwolfe.substack.com/p/prompt-ensembles-make-llms-more-reliable
往期推荐
「提示工程系列」转译(1):思维链(CoT)提示-一种实用而简单的LLM“推理”方法
「提示工程系列」转译(2):实用提示工程-成功提示 LLM 的提示和技巧
「提示工程系列」转译(3):提示工程进阶-当小样本学习还不足以解决问题怎么办?
END
扫码加群,
立变AI🍚!
AI范儿读者群
那些prompt了我的,
是否也prompt了你...